是否可以使用CUDA中的推力库对2D数组使用thrust::device |
您所在的位置:网站首页 › vector developer › 是否可以使用CUDA中的推力库对2D数组使用thrust::device |
在STL和thrust中,vector是数据元素的容器,遵循严格的线性序列,因此它本质上是一维的。实际上,这些数据元素可以是普通类型,甚至是结构和对象,但它们不能是其他向量(与STL不同)。 您可以创建向量数组,但通常需要对数组中的每个向量逐个执行推力操作。 关于语法,您不能这样做: thrust::device_vector D[5][10];你可以这样做: thrust::device_vector D[5][10];然而,这将创建一个二维向量数组,这不是您想要的,我不认为。 在许多情况下,2-D数组可以被“扁平化”,就像它们是1维的一样,并且在不了解更多关于您的情况的情况下,这是我建议研究的。例如,如果您可以使用指针索引将2-D数组视为1-D数组,那么您可以使用单个with::fill调用来填充整个数组。 我还建议大家熟悉一下thrust quick start guide。 以下是一个工作示例,显示了主机上具有基本展平的2D数组: #include #include #include #define H 5 #define W 10 __global__ void kernel(int *data, int row, int col) { printf("Element (%d, %d) = %d\n", row, col, data[(row*W)+col]); } int main(void) { int h[H][W]; thrust::device_vector d(H*W); thrust::copy(&(h[0][0]), &(h[H-1][W-1]), d.begin()); thrust::sequence(d.begin(), d.end()); kernel(thrust::raw_pointer_cast(d.data()), 2, 3); cudaDeviceSynchronize(); return 0; } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |